﻿Imports System.IO

Public Class Juego
    Private ListaPalabras As New List(Of Palabra)
    Private ListaRealizadas As New List(Of Integer)
    Private Aciertos As Integer = 0
    Private Errores As Integer = 0
    Private NumeroPalabra As Integer = 0
    Public cambio As Boolean = False


    Public Function Añadir(ByVal palabra As Palabra) As String
        If palabra Is Nothing Then Return "La palabra debe existir"
        If palabra.Enunciado = "" Or palabra.Descripcion = "" Then Return "Faltan datos"
        'Const letras = "abcdefghijklmnñopqrstuvwxyz"
        ' Contains funciona porque hemos implementado Equals en Palabra
        If ListaPalabras.Contains(palabra) Then Return "Ya existe la palabra " & palabra.Enunciado
        ListaPalabras.Add(palabra)
        Return ""
    End Function

    Sub Borrar(ByVal enunciado As String)
        For i As Integer = 0 To ListaPalabras.Count - 1
            If ListaPalabras(i).Enunciado = enunciado Then
                ListaPalabras.Remove(ListaPalabras(i))
                Exit For
            End If

        Next
        cambio = True
    End Sub

    Public Sub BorrarTodas()
        ListaPalabras.Clear()
        cambio = True
    End Sub

    Public Function PalabraAlAzar() As Palabra
        Dim num As Integer
        If ListaRealizadas.Count < ListaPalabras.Count Then

            Do
                Dim rnd As New Random()
                num = rnd.Next(ListaPalabras.Count)
            Loop Until Not ListaRealizadas.Contains(num)
            ListaRealizadas.Add(num)
            NumeroPalabra = num
            Return ListaPalabras(num)
        End If
        Return Nothing
    End Function

    Public Function PosicionesLetra(ByVal letra As Char) As List(Of Integer)
        Dim ListaLetras As New List(Of Integer)
        If ListaPalabras(NumeroPalabra).Enunciado.Contains(letra) Then
            For i As Integer = 0 To ListaPalabras(NumeroPalabra).Enunciado.Length - 1
                If ListaPalabras(NumeroPalabra).Enunciado.ElementAt(i) = letra Then
                    ListaLetras.Add(i)
                End If
            Next
            Aciertos = Aciertos + ListaLetras.Count
            Return ListaLetras
        End If
        'no lo ha encontrado
        Errores += 1
        Return Nothing
    End Function

    Public ReadOnly Property Ahorcado As String
        Get
            If Errores = 5 Then Return "Has perdido"
            Return Nothing
        End Get
    End Property

    Public ReadOnly Property Adivinado As String
        Get
            If Aciertos = ListaPalabras(NumeroPalabra).Enunciado.Length Then Return "Has ganado"
            Return Nothing
        End Get
    End Property

    Public Sub Reiniciar()
        ListaRealizadas.Clear()
        Aciertos = 0
        Errores = 0
    End Sub

    Public Sub New()
        'ListaPalabras.Add(New Palabra("coche", "vehiculo de cuatro ruedas"))
        'ListaPalabras.Add(New Palabra("felipe", "rey de españa"))
        'ListaPalabras.Add(New Palabra("mikel blanco", "top dj comercial")
        Dim fichero As StreamReader
        If File.Exists("listapalabras.txt") Then
            fichero = New StreamReader("listapalabras.txt")
            Try

                Do Until fichero.EndOfStream ' Fin del fichero (boolean)
                    Dim datos() As String
                    Dim linea As String

                    linea = fichero.ReadLine
                    datos = linea.Split("*")

                    Añadir(New Palabra(datos(0), datos(1)))
                Loop

            Catch ex As Exception
                ListaPalabras.Clear() ' Instrucciones a ejecutar si se produce un error de ejecución 
            Finally
                fichero.Close() ' Instrucciones a ejecutar al finalizar, con o sin errores de ejecución 
            End Try
        Else
            File.CreateText("listapalabras.txt")
        End If
    End Sub
    Public Function Guardar() As String
        Dim fichero As StreamWriter
        If File.Exists("listapalabras.txt") Then
            Try
                fichero = New StreamWriter("listapalabras.txt")
                For i As Integer = 0 To ListaPalabras.Count - 1 Step 1
                    fichero.WriteLine(ListaPalabras(i).Enunciado & "*" & ListaPalabras(i).Descripcion)
                Next
            Catch ex As Exception
                Return ex.Message
            End Try

            fichero.Close()
            Return ""
        End If
        Return "error"
    End Function
End Class
